package br.com.equipe1.controler;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

import br.com.equipe1.model.Representante;
import br.com.equipe1.model.service.CargoService;
import br.com.equipe1.model.service.EnderecoRepresentanteService;
import br.com.equipe1.model.service.RepresentanteService;
import br.com.equipe1.utils.FacesUtils;

@ManagedBean
@ViewScoped
public class RepresentanteBean implements Serializable{
	
	private static final long serialVersionUID = -8870304295869616138L;
	
	private Representante representante;
	private List<Representante> listaRepresentantes;
	private RepresentanteService representanteService;
	private CargoService cargoService;
	private EnderecoRepresentanteService enderecoRepresentanteService;	
	private boolean isEditando;
	private Map<String, Object> filtro;
	
	public String getHeader(){
		if(isEditando){
			return "Editar Representante";
		}
		return "Cadastrar Representante";
		
	}
	
	public void editar(){
		setEditando(true);
	}	
	
	private void limpar(ActionEvent event) {
		representante = new Representante();
		listaRepresentantes = null;		
	}
	
	public void salvar(){
		try {
			cargoService = new CargoService();
			cargoService.salvar(getRepresentante().getCargo());
			enderecoRepresentanteService = new EnderecoRepresentanteService();
			enderecoRepresentanteService.salvar(getRepresentante().getEnderecoRepresentante());
			representanteService = new RepresentanteService();
			representanteService.salvar(getRepresentante());
			setEditando(false);
			limpar(null);
		} catch (Exception e) {
			e.printStackTrace();
			FacesUtils.error("Erro ao salvar representante. Contate administrador");
		}
	}	

	public void remover(){
		try {
			representanteService = new RepresentanteService();
			representanteService.remover(getRepresentante().getId());
		} catch (Exception e) {
			e.printStackTrace();
			FacesUtils.error("Erro ao remover representante. Contate administrador");
		}
	}
	
	public void consultar(){
		try {
			representanteService = new RepresentanteService();
			listaRepresentantes = representanteService.buscarPorFiltro(getFiltro());
			if(listaRepresentantes.isEmpty()){
				FacesUtils.warn("Nenhum representante encontrado.");
			}
		} catch (Exception e) {
			e.printStackTrace();
			FacesUtils.error("Erro ao consultar representante. Contate Administrador.");
		}
	}
	
	public Representante getRepresentante() {
		if(representante == null){
			representante = new Representante();
		}
		return representante;
	}
	
	public void setRepresentante(Representante representante) {
		this.representante = representante;
	}
	
	public List<Representante> getListaRepresentantes() {
		if(listaRepresentantes == null){
			representanteService = new RepresentanteService();
			listaRepresentantes = representanteService.buscarTodos();
		}
		return listaRepresentantes;
	}
	
	public void setListaRepresentantes(List<Representante> listaRepresentantes) {
		this.listaRepresentantes = listaRepresentantes;
	}

	public boolean isEditando() {
		return isEditando;
	}

	public void setEditando(boolean isEditando) {
		this.isEditando = isEditando;
	}

	public Map<String, Object> getFiltro() {
		if(filtro == null){
			filtro = new HashMap<>();
		}
		return filtro;
	}

	public void setFiltro(Map<String, Object> filtro) {
		this.filtro = filtro;
	}
}
